﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.Drawing;
using HCommon;
using System.Net.Mail;

namespace eStock.hControl
{
    public partial class hButton : Button
    {
        public hButton()
        {
            InitializeComponent();
        }

        public hButton(IContainer container)
        {
            container.Add(this);
            InitializeComponent();
        }

        public enum ButtonType { None, New, Save, Qry, Del, Close, Add, }

        protected Control hCheckRadian;
        [Category("1-HCOM"), DefaultValue(false), Description("Phạm vi kiểm tra lúc save")]
        public Control CheckRadian
        {
            get { return hCheckRadian; }
            set { hCheckRadian = value; }
        }

        protected DataGridView hCheckGrid;
        [Category("1-HCOM"), DefaultValue(false), Description("Check grid khi save")]
        public DataGridView CheckGrid
        {
            get { return hCheckGrid; }
            set { hCheckGrid = value; }
        }

        protected bool hError = false;
        [Category("1-HCOM"), DefaultValue(false), Description("Tình trạng save"), ReadOnly(true)]
        public bool Error
        {
            get { return hError; }
            set { hError = value; }
        }

        protected ButtonType hType = ButtonType.None;
        [Category("1-HCOM"), DefaultValue(ButtonType.None), Description("Kiểu nút : Save thì là nút Lưu, Qry thì là nút truy vấn, Del thì là nút xóa, Exit thì là đóng form")]
        public ButtonType Type
        {
            get { return hType; }
            set
            {
                if (value == null)
                {
                    return;
                }
                if (value == ButtonType.New)
                {
                    this.Image = Properties.Resources.New;
                    this.Text = "Thêm mới";
                }
                else if (value == ButtonType.Save)
                {
                    this.Image = Properties.Resources.Save;
                    this.Text = "Lưu";
                }
                else if (value == ButtonType.Qry)
                {
                    this.Image = Properties.Resources.Find;
                    this.Text = "Tra cứu";
                }
                else if (value == ButtonType.Del)
                {
                    this.Image = Properties.Resources.Delete;
                    this.Text = "Xóa";
                }
                else if (value == ButtonType.Close)
                {
                    this.Image = Properties.Resources.Exit;
                    this.Text = "Đóng";
                }
                else if (value == ButtonType.Add)
                {
                    this.Image = Properties.Resources.Add_16;
                    this.Text = "Thêm";
                }
                this.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
                this.TextAlign = ContentAlignment.MiddleRight;
                hType = value;
            }
        }

        private void hButton_Click(object sender, EventArgs e)
        {
            if (this.Type == ButtonType.Save)
            {
                hError = false;
                // Kiểm tra phạm vi khi save
                if (hCheckRadian != null && hCheckRadian.HasChildren == true)
                {
                    foreach (Control ctr in hCheckRadian.Controls)
                    {
                        try
                        {
                            // Trường hợp control là textbox
                            if (ctr.GetType().Name.Contains("hTextBox"))
                            {
                                hTextBox tb = (hTextBox)ctr;
                                // Kiểm tra trống
                                if (tb.NotEmpty == true)
                                {
                                    if (tb.Text.Trim().Length == 0)
                                    {
                                        ToolTip tt = new ToolTip();
                                        tt.Show("Trường này không được để trống !", tb, 3000);
                                        tb.BackColor = Color.MistyRose;
                                        hError = true;
                                    }
                                    else
                                    {
                                        if (tb.FBCode != null && tb.FBCode.Trim().Length > 0)
                                        {
                                            tb.BackColor = Color.PaleTurquoise;
                                        }
                                        else
                                        {
                                            tb.BackColor = SystemColors.Window;
                                        }
                                    }
                                }

                                // Kiểm tra định dạng email
                                if (tb.CheckEmail == true)
                                {
                                    // Nếu có nhập vào email thì mới kiểm tra định dạng
                                    if (tb.Text.Trim().Length > 0)
                                    {
                                        try
                                        {
                                            MailAddress nguoiNhan = new MailAddress(tb.Text.Trim());
                                            tb.BackColor = SystemColors.Window;
                                        }
                                        catch
                                        {
                                            ToolTip tt = new ToolTip();
                                            tt.Show("Trường Email không đúng định dạng !", tb, 3000);
                                            tb.BackColor = Color.MistyRose;
                                            hError = true;
                                        }
                                    }
                                }
                            }
                            else if (ctr.GetType().Name.Contains("hNumeric"))
                            {
                                hNumeric nmr = (hNumeric)ctr;
                                // Kiểm tra trống
                                if (nmr.NotZero == true)
                                {
                                    if (nmr.Value == 0)
                                    {
                                        ToolTip tt = new ToolTip();
                                        tt.Show("Trường số này phải nhập giá trị lớn hơn 0 !", nmr, 3000);
                                        nmr.BackColor = Color.MistyRose;
                                        hError = true;
                                    }
                                    else
                                    {
                                        nmr.BackColor = SystemColors.Window;
                                    }
                                }
                            }
                        }
                        catch { }
                    }
                }

                if (hCheckGrid != null)
                {
                    foreach (DataGridViewRow row in hCheckGrid.Rows)
                    {
                        if (row.IsNewRow == true)
                        {
                            continue;
                        }

                        foreach (DataGridViewColumn col in hCheckGrid.Columns)
                        {
                            if (col.GetType().Name == "hDataGridViewTextBoxColumn")
                            {
                                hDataGridViewTextBoxColumn hCol = (hDataGridViewTextBoxColumn)col;
                                if (hCol.NotEmpty)
                                {
                                    if (row.Cells[hCol.Index].Value == null || row.Cells[hCol.Index].Value.ToString().Trim().Length == 0)
                                    {
                                        row.Cells[hCol.Index].Style.BackColor = Color.MistyRose;
                                        hError = true;
                                    }
                                    else
                                    {
                                        row.Cells[hCol.Index].Style.BackColor = SystemColors.Window;
                                    }
                                }
                            }
                            else if (col.GetType().Name == "hDataGridViewNumberBoxColumn")
                            {
                                hDataGridViewNumberBoxColumn hCol = (hDataGridViewNumberBoxColumn)col;
                                if (hCol.NotEmpty)
                                {
                                    if (row.Cells[hCol.Index].Value == null || row.Cells[hCol.Index].Value.ToString().Trim().Length == 0)
                                    {
                                        row.Cells[hCol.Index].Style.BackColor = Color.MistyRose;
                                        hError = true;
                                    }
                                    else
                                    {
                                        row.Cells[hCol.Index].Style.BackColor = SystemColors.Window;
                                    }
                                }
                            }
                            else if (col.GetType().Name == "hDataGridViewDateBoxColumn")
                            {
                                hDataGridViewDateBoxColumn hCol = (hDataGridViewDateBoxColumn)col;
                                if (hCol.NotEmpty)
                                {
                                    if (row.Cells[hCol.Index].Value == null || row.Cells[hCol.Index].Value.ToString().Trim().Length == 0)
                                    {
                                        row.Cells[hCol.Index].Style.BackColor = Color.MistyRose;
                                        hError = true;
                                    }
                                    else
                                    {
                                        row.Cells[hCol.Index].Style.BackColor = SystemColors.Window;
                                    }
                                }
                            }
                        }
                    }
                }

                if (hError == true)
                {
                    //Dialog.ShowMess(Dialog.mType.warn, "Lưu dữ liệu không thành công");
                    return;
                }
            }
            else if (this.Type == ButtonType.Del)
            {
                DialogResult ds = MessageBox.Show(this, "Bạn có chắc chắn muốn xóa những bản ghi đã chọn?", "Thông báo", MessageBoxButtons.YesNo);
                if (ds == System.Windows.Forms.DialogResult.No)
                {
                    return;
                }
            }
        }
    }
}
